package com.cargo.common.controller;

import com.cargo.common.mapper.cargo.DicDataAMapper;
import com.cargo.common.vo.DicData;
import org.springframework.beans.factory.annotation.Autowired;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class InitDictionary {

	@Autowired
	private DicDataAMapper dicDataAMapper;

	private static Map<Integer, List<DicData>> data = new HashMap<Integer, List<DicData>>();

	/**
	 * 类型列表
	 * <p>
	 * Description:这里写描述<br />
	 * </p>
	 * 
	 * @title InitDictionary.java
	 * @package com.tianmi.utils
	 * @author ZHU CHEN
	 * @version 0.1 2016年3月18日
	 */
	public enum TypeAll {
		CMN_JUDGE_FLAG(1),//是否标志
		CMN_SEX(2),//性别
		CMN_CURRENTCY(3),//币种
		CRM_COMPANY_SIZE(100),//公司规模
		CRM_TAX_TYPE(101),//纳税类型
		CRM_USER_STATUS(102),//用户状态
		FREIGHT_SPACE(200),//舱位情况
		FREIGHT_BILLTYPE(201),//代理单类型
		FREIGHT_CALLFLAG(202),//船公司电询标志
		FREIGHT_TRANSFER(203),//中转/直达标志
		FREIGHT_DISPLAY(204),//发布状态
		FREIGHT_CHARGE_UNIT(205),//费用单位
		FREIGHT_CHARGE_PAY(206),//费用付款方式
		FREIGHT_RULE_TYPE(207),//加价类型
		;
		
		private Integer typeId;

		TypeAll(Integer value1) {
			this.typeId = value1;
		}

		public Integer value() {
			return this.typeId;
		}
	}

	/**
	 * 值列表：对应data表的value
	 * <p>
	 * Description:这里写描述<br />
	 * </p>
	 * 
	 * @title InitDictionary.java
	 * @package com.tianmi.utils
	 * @author ZHU CHEN
	 * @version 0.1 2016年3月18日
	 */
	public enum ValueType {
		ZERO(0),ONE(1), TWO(2), THREE(3), FOUR(4), FIVE(5), SIX(6),SEVEN(7),EIGHT(8),NINE(9),TEN(10), // 如有更多值请自行扩展
		/**
		 * 是否标志
		 */
		CMN_JUDGE_FLAG_YES(1),//是
		CMN_JUDGE_FLAG_NO(2),//否
		/**
		 * 性别
		 */
		CMN_SEX_M(1),//男
		CMN_SEX_F(2),//女
		/**
		 * 币种
		 */
		CMN_CURRENTCY_USD(1),//USD
		CMN_CURRENTCY_CNY(2),//CNY
		
		/**
		 * 公司规模
		 */
		CRM_COMPANY_SIZE_ONE(1),//0-5人
		CRM_COMPANY_SIZE_TWO(2),//5-10人
		CRM_COMPANY_SIZE_THREE(3),//10-20人
		CRM_COMPANY_SIZE_FOUR(4),//20-50人
		CRM_COMPANY_SIZE_FIVE(5),//50人以上
		
		/**
		 * 纳税类型
		 */
		CRM_TAX_TYPE_GENERAL(1),//一般纳税人
		CRM_TAX_TYPE_BIZ(2),//小规模企业纳税人
		
		/**
		 * 舱位情况
		 */
		FREIGHT_SPACE_ENG(1),//充足
		FREIGHT_SPACE_BUSY(2),//紧张
		FREIGHT_SPACE_NOSPACE(3),//爆仓
		/**
		 * 代理单类型
		 */
		FREIGHT_BILLTYPE_MBL(1),//MB/L
		FREIGHT_BILLTYPE_HBL(2),//HB/L
		/**
		 * 船公司电询标志
		 */
		FREIGHT_CALLFLAG_NO(1),//非电询
		FREIGHT_CALLFLAG_YES(2),//电询
		/**
		 * 中转/直达标志
		 */
		FREIGHT_TRANSFER_DIR(1),//直达
		FREIGHT_TRANSFER_VIA(2),//中转
		/**
		 * 发布状态
		 */
		FREIGHT_DISPLAY_UNPUB(0),//未发布
		FREIGHT_DISPLAY_PUB(1),//已发布
		/**
		 * 费用单位
		 */
		FREIGHT_CHARGE_UNIT_CTN(1),//单箱
		FREIGHT_CHARGE_UNIT_BILL(2),//单票
		/**
		 * 费用付款方式
		 */
		FREIGHT_CHARGE_PAY_PREPAID(1),//预付
		FREIGHT_CHARGE_PAY_COLLECT(2),//到付
		
		/**
		 * 加价类型
		 */
		FREIGHT_RULE_TYPE_SALES(1),//内部销售价
		FREIGHT_RULE_TYPE_PUB(2),//公开价
		FREIGHT_RULE_TYPE_SPREAD(3),//平台推广价
		
		/**
		 * 用户状态
		 */
		SYS_USER_STATUS_JY(1),//禁用
		SYS_USER_STATUS_JH(2),//激活

		;
		private Integer value;

		ValueType(Integer value1) {
			this.value = value1;
		}

		public Integer value() {
			return this.value;
		}
	}

	public synchronized void load() {
		List<DicData> dataList = dicDataAMapper.queryAll();
		HashMap<Integer, List<DicData>> tempdata = new HashMap<Integer, List<DicData>>();
		for (DicData p : dataList) {
			if (tempdata.get(p.getTypeId()) == null) {
				tempdata.put(p.getTypeId(), new ArrayList<DicData>());
			}
			tempdata.get(p.getTypeId()).add(p);
		}
		data = tempdata;
	}

	/**
	 * 按类型id取集合
	 * <p>
	 * Description:这里写描述<br />
	 * </p>
	 * 
	 * @title InitDictionary.java
	 * @package com.tianmi.utils
	 * @author ZHU CHEN
	 * @version 0.1 2016年3月18日
	 */
	public static List<DicData> getList(Integer typeId) {
		return data.get(typeId);
	}

	/**
	 * 根据类型id和value值取中文名称
	 * <p>
	 * Description:这里写描述<br />
	 * </p>
	 * 
	 * @title InitDictionary.java
	 * @package com.tianmi.utils
	 * @author ZHU CHEN
	 * @version 0.1 2016年3月18日
	 */
	public static String getNameCn(Integer typeId, Integer value) {
		List<DicData> list = data.get(typeId);
		for (DicData d : list) {
			if (value.intValue() == d.getValue().intValue()) {
				return d.getNameCn();
			}
		}

		return "";
	}

	/**
	 * 根据类型id和value值取英文名称
	 * <p>
	 * Description:这里写描述<br />
	 * </p>
	 * 
	 * @title InitDictionary.java
	 * @package com.tianmi.utils
	 * @author ZHU CHEN
	 * @version 0.1 2016年3月18日
	 */
	public static String getNameEn(Integer typeId, Integer value) {
		List<DicData> list = data.get(typeId);
		for (DicData d : list) {
			if (value.intValue() == d.getValue().intValue()) {
				return d.getNameEn();
			}
		}
		return "";
	}

	/**
	 * 根据类型id和中文名称(nameCN)取value
	 * <p>
	 * Description:这里写描述<br />
	 * </p>
	 * 
	 * @title InitDictionary.java
	 * @package com.tianmi.utils
	 * @author ZHU CHEN
	 * @version 0.1 2016年3月18日
	 */
	public static List<Integer> getValuesNameCN(Integer typeId, String name_CN) {
		List<Integer> result = new ArrayList<Integer>();
		List<DicData> list = data.get(typeId);
		for (DicData d : list) {
			if (d.getNameCn() != null && name_CN!=null && d.getNameCn().contains(name_CN)) {
				result.add(d.getValue());
			}
		}
		return result;
	}

	/**
	 * 根据类型id和英文名称(nameEN)取value
	 * <p>
	 * Description:这里写描述<br />
	 * </p>
	 * 
	 * @title InitDictionary.java
	 * @package com.tianmi.utils
	 * @author ZHU CHEN
	 * @version 0.1 2016年3月18日
	 */
	public static List<Integer> getValuesByNameEN(Integer typeId, String name_EN) {
		List<Integer> result = new ArrayList<Integer>();
		List<DicData> list = data.get(typeId);
		for (DicData d : list) {
			if (d.getNameEn() != null && d.getNameEn().contains(name_EN)) {
				result.add(d.getValue());
			}
		}
		return result;
	}

	public static void main(String[] args) {
		// 取值写法：
//		System.out.println(ValueType.TWO.value());
//		InitDictionary.getNameCn(TypeAll.CUSTOMERCODE.value(), ValueType.TWO.value());
	}
}
